fix: align rtl toolbar state and alignment writes with ooxml bidi#3244
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 66fe33d6ff
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
…i export Adds three coverage layers for the SD-3094 writer-side mirror: - paragraph-alignment unit (23 tests): direct coverage of the new helper pair (mapDisplayAlignmentToStoredJustification + mapStoredJustificationToDisplayAlignment), including the absent-value default and a display->stored->display roundtrip for every alignment. - Toolbar behavior (4 tests): clicking each align button on an RTL paragraph writes the expected mirrored OOXML justification (verified via the doc-api). - Doc-API story (5 tests): format.paragraph.setAlignment on an RTL paragraph exports the expected w:jc value (left->right, right->left, center->center, justify->both); LTR baseline unchanged. Fixture rtl-paragraph-alignment.docx is duplicated from the SD-3093 behavior tests so this PR's CI can run standalone; it will collapse to the SD-3093 copy when the two PRs merge.
…6.1) Adds regression coverage for the spec rule that section-level w:bidi must NOT cascade to paragraph w:jc interpretation. Section bidi affects only section-level properties (page numbers, columns), not paragraph alignment. The fixture has a section with <w:bidi/> but two paragraphs without paragraph-level <w:bidi/>. Tests verify that clicking Align Left or Align Right on these paragraphs stores the display value unchanged (no mirror), since the paragraph itself is LTR per spec.
…n, and indent Expands SD-3094 behavior coverage across additional surfaces that share the alignment-writer code path: - Headings (Heading1/Heading2 with w:bidi): Align Left/Right mirrors the stored OOXML the same way it does for body paragraphs. - Table cells with RTL direction (w:bidiVisual): Align Left on a Hebrew cell paragraph stores w:jc=right. - Multi-paragraph selection across three RTL paragraphs: Align Left applies the writer mirror per-paragraph, all three end up stored as w:jc=right. - Indent + RTL: Increase Indent on an RTL paragraph updates the paragraph properties (smoke test against the toolbar indent button). Lists + RTL alignment was investigated but deferred: it needs a hand-crafted OOXML fixture with explicit numbering + paragraph-level bidi, which is a bigger scope and better tracked separately.
There was a problem hiding this comment.
hey @artem-harbour - i pushed three test commits on yours: the round-1 ones i flagged, section-only rtl (§17.6.1), and coverage for headings, rtl tables, multi-paragraph selection, and indent.
tested the full flow live on main + this PR: clicking align saves the right value and renders correctly.
lgtm.
|
🎉 This PR is included in @superdoc-dev/mcp v0.3.0-next.82 The release is available on GitHub release |
|
🎉 This PR is included in @superdoc-dev/react v1.2.0-next.125 The release is available on GitHub release |
|
🎉 This PR is included in vscode-ext v2.3.0-next.127 |
|
🎉 This PR is included in superdoc-cli v0.8.0-next.99 The release is available on GitHub release |
|
🎉 This PR is included in superdoc-sdk v1.8.0-next.81 |
|
🎉 This PR is included in superdoc v1.30.0-next.81 The release is available on GitHub release |
Linear: SD-3094
Fixes RTL paragraph alignment parity across toolbar state and alignment commands.
What changed
left/rightmirroring for RTL,justify↔both).setTextAligncommand to:run),rightToLeft,paragraphsSetAlignmentWrapper,style.apply/spanStyle.applyexecutor logic).Result
Mod-Shift-L/R) apply expected visual alignment in RTL paragraphs.Related: #3235